/**
* @Title: ControllerAdvice.java
* @Package com.an.controller
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月16日 下午11:24:54
* @version V1.0
*/


package com.an.controller;

import java.util.Date;

import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

/**
* @ClassName: ExceptionHandleradvice
* @Description: TODO(@ControllerAdvice将对于控制器的全局配置放置在同一个位置。处理全局异常，更人性化将异常输出给用户)
* @author antch,861710865@qq.com
* @date 2017年7月16日 下午11:24:54
*
*/
/*
 * @ControllerAdvice
 *
 * 该注解允许开发人员将所有的对于控制器的全局配置放置在同一个位置，注解了
 * @controller的类中的方法都可以使用@ExceptionHandleer、@InitBinder、@ModelAttribute注解到
 * 方法上，这些方法对于所有注解了@requestMapping的控制器内的方法有效。
 *
 */
@ControllerAdvice//声明一个控制器建言，由于该注解融合了@Controller，所以就会注册为spring的bean
public class ExceptionHandleradvice {

	/*
	 * @ExceptionHandler在此定义全局处理，value属性可以过滤拦截的条件
	 */
	@ExceptionHandler(value=Exception.class)
	public ModelAndView exception(Exception exception,WebRequest request) {
		ModelAndView modelAndView = new ModelAndView("error");//error页面
		modelAndView.addObject("errorMessage", exception.getMessage());
		return modelAndView;
	}

	/*
	 * @ModelAttribute将键值对添加到全局，所有注解的@RequestMapping
	 * 的方法可获得此键值对，如获取msg的值
	 */
	@ModelAttribute
	public void addAttribute(Model model) {
		model.addAttribute("msg", "额外信息，当前时间：" + (new Date()));
	}

	@InitBinder
	public void initBinder(WebDataBinder webDataBinder) {
		webDataBinder.setDisallowedFields("Id");
	}
}
